package main

var _ = `
11. 盛最多水的容器
给定一个长度为 n 的整数数组 height 。有 n 条垂线，第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。

找出其中的两条线，使得它们与 x 轴共同构成的容器可以容纳最多的水。

返回容器可以储存的最大水量。

说明：你不能倾斜容器。

 

示例 1：



输入：[1,8,6,2,5,4,8,3,7]
输出：49 
解释：图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下，容器能够容纳水（表示为蓝色部分）的最大值为 49。
示例 2：

输入：height = [1,1]
输出：1
 

提示：

n == height.length
2 <= n <= 105
0 <= height[i] <= 104
`

func maxArea(height []int) int {
	// 从两边开始向中间找,依次递进两边较小的高度值

	// 替换小边,只有大于小边的值的边才能构成更大的面积
	maxRes := 0
	if len(height) < 2 {
		return maxRes
	}

	var minHeight, w int
	for l, r := 0, len(height)-1; l < r; {
		w = r - l
		if height[l] < height[r] {
			minHeight = height[l]
			l++
		} else {
			// 如果存在两边面积更大,则一定是中间的某两条边,且不包含当前的两条边
			// 经过两次以上,一定能找到两条边

			// 第一次  H[1](1)  H[N](1)  => H[2](2)  H[N](1)
			// 第二次  H[2](2)  H[N](1)  => H[2](2)  H[N-1](3)
			minHeight = height[r]
			r--
		}
		area := w * minHeight
		if area > maxRes {
			maxRes = area
		}
	}

	return maxRes
}

func main() {

}
